package JVM相关知识;

/**
 * @author coderFu
 * @create 2021/12/21
 * 常量池
 */
public class ConstantPool {

    public static void main(String[] args) {
        //boolean 的常量池

//        Boolean flag1 = true;
//        Boolean flag2 = true;
//        System.out.println(flag1 == flag2);

        //存储在栈内
//        boolean flag3 = false;
//        boolean flag4 = false;
//        System.out.println(flag3 == flag4);

        //字符型常量池（Character）常量池
//        Character c1 = (char)-1;
//        Character c2 = (char)-1;
//        System.out.println(c1 == c2);
//
//        Character c3 = (char)2;
//        Character c4 = (char)2;
//        System.out.println(c3 ==c4);
//
//        Character c5 = (char)128;
//        Character c6 = (char)128;
//        System.out.println(c5 ==c6);

        //Byte常量池
//        Byte b1 = -128;
//        Byte b2 = -128;
//        System.out.println(b1 == b2);
//
//        Byte b3 = 127;
//        Byte b4 = 127;
//        System.out.println(b3 == b4);

        //Short常量池
//        Short s1 = -129;
//        Short s2 = -129;
//        System.out.println(s1 == s2);
//
//        Short s3 = -128;
//        Short s4 = -128;
//        System.out.println(s3 == s4);

        //Integer 常量池
//        Integer i1 = -128;
//        Integer i2 = -128;
//        System.out.println(i1 == i2);
//
//        Integer i3 = 127;
//        Integer i4 = 127;
//        System.out.println(i3 == i4);
//
//        Integer i5 = 129;
//        Integer i6 = 129;
//        System.out.println(i5 == i6);

        //Long 常量池

//        Long l1 =  -129L;
//        Long l2 =  -129L;
//        System.out.println(l1 == l2);
//
//        Long l3 =  127L;
//        Long l4 =  127L;
//        System.out.println(l3 == l4);

        //Float 没有实现常量池技术

//        Float f1 = 1.0f;
//        Float f2 = 1.0f;
//        System.out.println(f1 == f2);

        //Double 没有实现常量池技术

//        Double d1 = 1.0d;
//        Double d2 = 1.0d;
//        System.out.println(d1 == d2);

        //String 的池化技术
        String s1 = "Hello";
        String s2 = "Hello";
        String s3 = "Hel"+"lo";
        System.out.println(s1 == s3);//编译器可以预知，编译期间直接放到class文件的常量池中，运行时，指向同一个地址
        String s4 = "Hel"+new String("lo");
        String s5 = new String("Hello"); // s5 已经在堆中
        String s6 = s5.intern(); //因此会直接让s6的指向到堆中的地址

        /**
         * 基本数据内存都存储在栈上内存上，因此比较与池化技术无关
         * 常量池技术：六种类型使用了常量池技术 ，  boolean （true false）
         * character（0-127） 、 short（-128-127）、 integer（-128-127、
         * long（-128-127）、byte（-128-127）
         *
         */








    }
}
